package n72_final修饰符原理;

/**
 * @author fu
 * @date 2022-02-21 21:57
 * 概要：
 * ---------------------------------------------------------------
 * |                                                              |
 * |         获取final 的原理           |
 * |                                                             |
 * |=============================================================
 */
public class T2_TestFinal {

    final static int A = 10;
    static int B = Short.MAX_VALUE+1; // 短整型最大值 + 1 （超过极限）



static int Z = 100;

}

class UseFinal1{
    // 测试 将鼠标光标 点击当前类，然后 Code -->> Show Bytecode outline
    public void test(){
        /**
         * 其他类 使用 final A 的 字节码指令 ： BIPUSH 10
         *      相当于把final变量修饰的值 赋值一份到其他类中，没有共享的操作 ，[使用栈内存]
         *
         * A没有使用final 的 字节码指令 ： GETSTATIC n72_final修饰符原理/T2_TestFinal.A : I
         *      当前类 从 另外一个类 去获取成员变量， [走得是共享内存] (性能比上一个低)
         *
         */
        System.out.println(T2_TestFinal.A);


        /**
         * 字节码指令 ：LDC 32768
         *      读取的是 常量池中的内容， 没有走 GETSTATIC 共享内存，所以效率高
         *
         * B 如果没有使用 final 的 字节码指令 ： GETSTATIC n72_final修饰符原理/T2_TestFinal.B : I
         *       当前类 从 另外一个类 去获取成员变量， [走得是共享内存] (性能比上一个低)
         *
         */
        System.out.println(T2_TestFinal.B);
        System.out.println(T2_TestFinal.Z);


    }
}


